/**
 * redisHelper 工具类（适应场景：保持会话，开启一个redis不关闭，
 * 可以用连接池改进，只维护一条redis连接不安全，托管给连接池（测试网络情况、保持连接始终可用、释放机制）去维护连接）
 * @type {Function}
 * Vector Ho
 */
module.exports = redisHelper;

function redisHelper(){}

redisHelper.prototype.redis = require('redis');

// 此处勿用 this.redis来创建redis客户端
redisHelper.prototype.client = require('redis').createClient();
// redisHelper.prototype.expire = 20 * 60;  过期时间，默认为20分钟

/**
 * 封装redis的set方法
 * @param key 键名
 * @param value 值
 * @param expire 过期时间
 * @param callback
 */
redisHelper.prototype.set = function(key, value, expire, callback) {
    // 连接事件  不能每次插入操作就注册一个事件监听器这样会溢出的
    // that.client.on('connect', function(error) {
    //     if(error) {
    //         console.log('redis connect error');
    //     } else {
    //        //  console.log('redis connect success...');
    //     }
    // });

    var that = this;
    var size = arguments.length;

    if(size === 3 && typeof expire === 'function') { // 没传expire参数情况
        callback = expire;
    }

    that.client.set(key, value, function(error, reply) {
        if(size === 4 && typeof expire !== 'undefined' && expire !== '' && expire) {
            console.log('key expire: ' + expire);
            that.client.expire(key, expire); // 持久时间
        } else if(size === 4) {
            console.log('key expire: ' + that.expire);
            that.client.expire(key, that.expire); // 持久一天
        }
        return callback(error, reply);
    });
}

/**
* 封装redis的get方法
* @param key 需要获取的值的键名
* @param callback
*/
redisHelper.prototype.get = function(key, callback) {
    var client = this.client;

    // client.on('connect', function(error){
    //     if(error){
    //         console.log('redis connect error');
    //     } else {
    //         console.log('redis key:' + key);
    //     }
    // });

    client.get(key, function(error, reply) {
        return callback(error, reply);
    });
}

/**
 * 封装redis的del方法
 * @param key 键名
 * @param callback
 */
redisHelper.prototype.delete = function(key, callback) {
    var client = this.client;

    // client.on('connect', function(error){
    //     if(error){
    //         console.log('redis connect error');
    //     } else {
    //         console.log('redis key:' + key);
    //     }
    // });

    client.del(key, function(error, reply) {
        /** 日志
        if(error) {
            var mongodbObj = new thisObj.Mongodb();
            var logJson = {
                'log':'redis del 出错', 'params':'', 'code':error.code,
                'fatal':error.fatal, 'message':error.message, 'create_time':thisObj.customeFunc.getNowFormatTime()
            };
            mongodbObj.insert('syslog', logJson, function(error, result){});
        }
        */
        return callback(error, reply);
    });
}

/**
 * 封装redis的quit方法
 */
redisHelper.prototype.close = function() {
    var client = this.client;

    client.on('end', function(error) {
        if(error) {
            console.log('redis close error');
        } else {
            console.log('redis closed.');
        }
    });

    client.quit();
}